﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ManagementSystem
{
    /// <summary>
    /// 连接数据库方法类
    /// </summary>
    public class Database
    {
        /// <summary>
        /// 获取一个打开的数据库连接
        /// </summary>
        /// <returns></returns>
        public SqlConnection connection()
        {
            //定义数据库连接字符串,包含服务器地址、数据库名称、用户ID和密码等信息
            string str = "Data Source=LAPTOP-HK6EOMOS;Initial Catalog=CourseSelectionSystem2024;Persist Security Info=True;User ID=sa;Password=TNT021212123066;TrustServerCertificate=True";

            // 创建一个新的 SqlConnection 实例，并使用上面定义的连接字符串初始化它
            SqlConnection sc = new SqlConnection(str);

            //打开数据库链接
            sc.Open();

            // 返回已经打开的数据库连接对象
            return sc;
        }

        /// <summary>
        /// 创建并返回一个 SqlCommand 对象，该对象将使用提供的 SQL 语句和通过 connection 方法获取的数据库连接
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public SqlCommand command(string sql)
        {
            // 创建一个 SqlCommand 实例，传入 SQL 语句和通过 connection 方法获得的数据库连接
            SqlCommand sc = new SqlCommand(sql, connection());
            return sc;
        }

        /// <summary>
        /// 用于delete update insert，返回受影响的行数
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public int Excute(string sql)
        {
            //使用 command 方法创建一个 SqlCommand 对象，并调用 ExecuteNonQuery 方法执行 SQL 语句, ExecuteNonQuery 适用于不返回任何数据集的操作，例如插入、更新或删除记录
            return command(sql).ExecuteNonQuery();
        }

        /// <summary>
        /// 用于select，返回SqlDataReader对象，包含select到的数据
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public SqlDataReader read(string sql)
        {
            // 使用 command 方法创建一个 SqlCommand 对象，并调用 ExecuteReader 方法执行 SQL 查询,ExecuteReader 用于执行返回数据集的查询，并返回 SqlDataReader 对象以读取数据
            return command(sql).ExecuteReader();
        }
    }
}
